package com.zp.self.module.level_4_算法练习.数学.位运算;

/**
 * @author By ZengPeng
 */
public class 力扣_190_颠倒二进制位 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_190_颠倒二进制位().reverseBits(-3));
    }

    /**
     题目：颠倒给定的 32 位无符号整数的二进制位。

     分析：【P ❤】
         1.无符号位移，不用管符号， 每次除2 得到的余数放前面
         2.不断求余数，得到n的最后一位 &1  ，根据余数拼装结果
            --执行用时：0 ms, 在所有 Java 提交中击败了100.00%的用户

     边界值注意：
     1.
     */
    public int reverseBits(int n) {
       int res=0;
       for (int i = 0; i < 32; i++) {
            res=res<<1;
            res+=n&1;
            n=n>>1;
       }
       return res;
    }
}
